define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'ai-helper'], function ($, undefined, Backend, Table, Form, AiHelper) {

    var Controller = {
        index: function () {
            // 获取URL中的参数
            var urlParams = new URLSearchParams(location.search);
            var community_id = urlParams.get('community_id') || '';
            var publicwelfare_id = urlParams.get('publicwelfare_id') || '';

            // 如果在URL中没有找到参数，尝试从用户信息中获取
            if (!community_id && Config && Config.admin && Config.admin.community_id) {
                community_id = Config.admin.community_id;
            }
            if (!publicwelfare_id && Config && Config.admin && Config.admin.publicwelfare_id) {
                publicwelfare_id = Config.admin.publicwelfare_id;
            }

            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'community/config/course/index' + location.search,
                    add_url: 'community/config/course/add' + location.search,
                    edit_url: 'community/config/course/edit',
                    del_url: 'community/config/course/del',
                    multi_url: 'community/config/course/multi',
                    import_url: 'community/config/course/import',
                    table: 'community_course_config',
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'weigh',
                // 自定义表格操作按钮
                operate: function (value, row, index) {
                    var table = this.table;
                    // 默认按钮组
                    var buttons = $.extend([], this.buttons || []);
                    // 编辑按钮
                    buttons.push({
                        name: 'edit',
                        icon: 'fa fa-pencil',
                        title: __('Edit'),
                        extend: 'data-toggle="tooltip"',
                        classname: 'btn btn-xs btn-success btn-editone',
                        // 自定义URL，添加必要的参数
                        url: function (row) {
                            var params = [];

                            // 优先使用行数据中的参数，如果没有则使用URL中的参数
                            var rowCommunityId = row.community_id || community_id;
                            var rowPublicwelfareId = row.publicwelfare_id || publicwelfare_id;
                            // 始终添加这两个参数，即使值为空
                            params.push('community_id=' + rowCommunityId);
                            params.push('publicwelfare_id=' + rowPublicwelfareId);

                            var url = $.fn.bootstrapTable.defaults.extend.edit_url + '/' + row.id;
                            url += '?' + params.join('&');
                            return url;
                        }
                    });
                    return Table.api.buttonlink(this, buttons, value, row, index, 'operate');
                },
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id'), sortable: true, visible: false},
                        {field: 'code', title: __('Code'), operate: 'LIKE'},
                        {field: 'name', title: __('Name'), operate: 'LIKE'},
                        {field: 'community.name', title: __('Community.name'), operate: 'LIKE'},
                        {field: 'publicwelfare.project_name', title: '课程代码', operate: 'LIKE'},
                        {field: 'cover', title: '课程图片', operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
                        {
                            field: 'intro',
                            title: '课程介绍',
                            operate: 'LIKE',
                            width: '200px',
                            formatter: function(value, row, index) {
                                return '<div style="max-width: 200px; word-wrap: break-word; white-space: normal;">' + value + '</div>';
                            }
                        },
                        {field: 'setcourese_id', title: '设置课程关联ID', operate: 'LIKE'},
                        {
                            field: 'operate',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            formatter: Table.api.formatter.operate
                        }
                    ]
                ]
            });
            // 表格加载完成后，移除所有 .btn-dragsort 元素
            table.on('load-success.bs.table', function () {
                $('.btn-dragsort').remove();
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        add: function () {
            // 初始化AI助手
            AiHelper.init({
                baseUrl: 'ai/ai/'
            });

            // AI生成课程介绍功能
            $(document).on('click', '[data-ai-generate-text]', function() {
                var $btn = $(this);
                var targetId = $btn.data('target-id');
                var promptTemplate = $btn.data('prompt-template');
                var $target = $('#' + targetId);
                var courseName = $('#c-name').val();

                if (!courseName) {
                    Layer.msg('请先输入课程名称', {icon: 2});
                    return;
                }

                // 替换模板中的变量
                var prompt = promptTemplate.replace('{course_name}', courseName);

                var originalText = $btn.html();
                $btn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> 生成中...');

                // 调用AI生成文本接口
                $.ajax({
                    url: 'ai/ai/generateText',
                    type: 'POST',
                    data: {
                        prompt: prompt,
                        max_tokens: 500
                    },
                    dataType: 'json',
                    success: function(response) {
                        if (response.code === 1) {
                            $target.val(response.data.content);
                            Layer.msg('课程介绍生成成功！', {icon: 1});
                        } else {
                            Layer.msg(response.msg || '生成失败', {icon: 2});
                        }
                    },
                    error: function() {
                        Layer.msg('网络错误，请重试', {icon: 2});
                    },
                    complete: function() {
                        $btn.prop('disabled', false).html(originalText);
                    }
                });
            });

            // AI生成图片的prompt设置
            $(document).on('click', '.ai-generate-image', function(e) {
                e.preventDefault();
                var $button = $(this);
                var courseName = $('#c-name').val();
                
                if (!courseName) {
                    Layer.msg('请先输入课程名称', {icon: 2});
                    return;
                }
                
                // 构建图片生成的prompt
                var prompt = '为课程"' + courseName + '"设计一张专业的课程封面图片';
                prompt += '。图片应该具有教育性、专业性和吸引力，适合作为在线课程的封面。';
                
                // 设置prompt到按钮的data属性中
                $button.attr('data-say', prompt);
                
                // 调用AI助手生成图片
                if (typeof AiHelper !== 'undefined') {
                    AiHelper.generateImageByButton($button);
                } else {
                    Layer.msg('AI助手未加载', {icon: 2});
                }
            });

            Controller.api.bindevent();
        },
        edit: function () {
            // 初始化AI助手
            AiHelper.init({
                baseUrl: 'ai/ai/'
            });
            
            // AI生成课程介绍功能
            $(document).on('click', '[data-ai-generate-text]', function() {
                var $btn = $(this);
                var targetId = $btn.data('target-id');
                var promptTemplate = $btn.data('prompt-template');
                var $target = $('#' + targetId);
                var courseName = $('#c-name').val();

                if (!courseName) {
                    Layer.msg('请先输入课程名称', {icon: 2});
                    return;
                }

                // 替换模板中的变量
                var prompt = promptTemplate.replace('{name}', courseName);

                var originalText = $btn.html();
                $btn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> 生成中...');

                // 调用AI生成文本接口
                $.ajax({
                    url: 'ai/ai/generateText',
                    type: 'POST',
                    data: {
                        prompt: prompt,
                        max_tokens: 500
                    },
                    dataType: 'json',
                    success: function(response) {
                        if (response.code === 1) {
                            // 使用正确的富文本编辑器赋值方法
                            Controller.api.setEditorContent($target, response.data.content);
                            Layer.msg('课程介绍生成成功！', {icon: 1});
                        } else {
                            Layer.msg(response.msg || '生成失败', {icon: 2});
                        }
                    },
                    error: function() {
                        Layer.msg('网络错误，请重试', {icon: 2});
                    },
                    complete: function() {
                        $btn.prop('disabled', false).html(originalText);
                    }
                });
            });
            
            // AI生成图片的prompt设置
            $(document).on('click', '.ai-generate-image', function(e) {
                e.preventDefault();
                var $button = $(this);
                var courseName = $('#c-name').val();
                if (!courseName) {
                    Layer.msg('请先输入课程名称', {icon: 2});
                    return;
                }
                
                // 构建图片生成的prompt
                var prompt = '为课程"' + courseName + '"设计一张专业的课程封面图片';
                prompt += '。图片应该具有教育性、专业性和吸引力，适合作为在线课程的封面。';
                
                // 设置prompt到按钮的data属性中
                $button.attr('data-say', prompt);
                
                // 调用AI助手生成图片
                if (typeof AiHelper !== 'undefined') {
                    AiHelper.generateImageByButton($button);
                } else {
                    Layer.msg('AI助手未加载', {icon: 2});
                }
            });

            Controller.api.bindevent();
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            },
            
            // 设置编辑器内容的通用方法
            setEditorContent: function($element, content) {
                try {
                    // 检查是否是富文本编辑器
                    if ($element.hasClass('editor') || $element.hasClass('summernote')) {
                        // 尝试不同的富文本编辑器

                        // 1. 尝试 Summernote
                        if ($.fn.summernote && typeof $element.summernote === 'function') {
                            try {
                                $element.summernote('code', content);
                                $element.trigger('change');
                                return;
                            } catch (e) {
                            }
                        }

                        // 2. 尝试 UEditor
                        if (typeof UE !== 'undefined' && UE.getEditor) {
                            var editor = UE.getEditor($element.attr('id'));
                            if (editor) {
                                editor.setContent(content);
                                return;
                            }
                        }

                        // 3. 尝试 CKEditor
                        if (typeof CKEDITOR !== 'undefined' && CKEDITOR.instances) {
                            var editor = CKEDITOR.instances[$element.attr('id')];
                            if (editor) {
                                editor.setData(content);
                                return;
                            }
                        }

                        // 4. 尝试 TinyMCE
                        if (typeof tinymce !== 'undefined') {
                            var editor = tinymce.get($element.attr('id'));
                            if (editor) {
                                editor.setContent(content);
                                return;
                            }
                        }

                        // 5. 最后回退到普通文本框
                        $element.val(content);
                    } else {
                        // 普通文本框
                        $element.val(content);
                    }

                    // 触发change事件
                    $element.trigger('change');

                } catch (error) {
                    // 出错时回退到普通文本框
                    $element.val(content);
                    $element.trigger('change');
                }
            }
        }
    };
    return Controller;
});
